package examples;

import com.jom.OptimizationProblem;

public class Mochila {

	public static void main(String[] args)
	{
		OptimizationProblem op = new OptimizationProblem();
		
		// Variable binaria: "1" si el objeto es seleccionado, "0" si no lo es.		
		op.addDecisionVariable( "x", true, new int[] {1,5}, 0, 1); // x
		
		// Beneficio de cada elemento
		op.setInputParameter(   "v", new int[] {1,2,3,4,5}, "row" ); // Value
		
		// Peso de cada elemento.
		op.setInputParameter(   "w", new int[] {5,4,3,2,1}, "row" ); // Weight
		
		// Valor que no puede superar la suma de los pesos.
		op.setInputParameter(   "W", 10 ); // Max weight
		
		// Maximizar beneficio.
		op.setObjectiveFunction( "maximize", "sum(v .* x)" );
		
		// La suma de los pesos no puede superar el valor W.
		op.addConstraint( "sum(w .* x) <= W" );
		
		/* Call the solver to solve the problem */
	  	op.solve("glpk");

		if (!op.solutionIsOptimal ()) throw new RuntimeException ("An optimal solution was not found");
			
		System.out.println("x: " + op.getPrimalSolution("x"));
		System.out.println("Total cost obtained: " + op.getOptimalCost());
		
	}

}
